﻿using Styx.Common;
using Styx.CommonBot;
using Styx.TreeSharp;
using Action = Styx.TreeSharp.Action;

namespace TuanHA_Combat_Routine
{
    public partial class Classname
    {
        #region UnholyRotation

        private static Composite UnholyRotation()
        {
            return new PrioritySelector(
                AutoTarget(),
                new Action(delegate
                    {
                        //Hold dps on Dungeon or Raid in No Combat
                        if (TreeRoot.Current.Name != "DungeonBuddy" &&
                            (InDungeon ||
                             InRaid) &&
                            !Me.Combat &&
                            Me.CurrentTarget != null &&
                            IsEnemy(Me.CurrentTarget) &&
                            !Me.CurrentTarget.IsTargetingMyPartyMember &&
                            !Me.CurrentTarget.IsTargetingMyRaidMember &&
                            !Me.CurrentTarget.IsTargetingMeOrPet)
                        {
                            return RunStatus.Success;
                        }

                        if (THSettings.Instance.AutoAoE &&
                            THSettings.Instance.UnittoStartAoE > 0 &&
                            !InArena &&
                            !InBattleground &&
                            CountEnemyNear(Me, 10) >= THSettings.Instance.UnittoStartAoE)
                        {
                            _aoEModeOn = true;
                        }
                        else
                        {
                            _aoEModeOn = false;
                        }

                        return RunStatus.Failure;
                    }),
                //But first, facing target
                //FacingTarget(),
                //Starting the movement right here
                MovementMoveStop(ret => Me.CurrentTarget, 3),
                MovementMoveToMelee(ret => Me.CurrentTarget),
                //DPS Rotation Here
                //WriteTargetInfo(),
                IceboundFortitudeStun(),//被晕,30码内,自动解
                DesecratedGround(),//被CC时,自动解
                TargetMyPetTarget(),//非JJC,战场,当前目标不在40码内,选取攻击我的宠物的敌人为目标
                PetAttack(),//修改过,对焦点控制后4秒后,只要宠物目标不是我当前目标,就攻击我当前目标
                PetLeap(),//没变身时,只能跳到敌人背后,变身后,可以冲锋敌人,打断并且定神2秒.这里貌似只有变身前的使用
                UseHealthstone(),
                UseBattleStandard(),
                Huddle(),//宠物的-伤50%的盾墙,10秒内不能使用其他技能
                PetFollow(),
                IceboundFortitude(),//血少用冰封
                LichborneHeal(),//40能量以上,才会使用变身回血
                AntiMagicShell(),//血少使用AMS
                AntiMagicShellLichborne(),//变身回血时,如果有周围有牧师或者骑士,给自己上盾
                AntiMagicShellEnemy(),//法系血少
                AntiMagicShellDebuff(),//debuff多了
                AntiMagicShellCaster(),//以我为目标的法系dps多于设定的数量时
                AntiMagicZone(),
                AntiMagicZoneDebuff(),
                AntiMagicZoneCaster(),
                DeathGrip(),//距离远,目标没有动,或者在动,但不是面向我动,拉他
                EmpowerRuneWeapon(),//修改为在战场或者竞技场,忽略敌人>我的80%血量的限制
                BloodFury(),//兽人的特殊天赋
                BloodTap(),//10码内,高于自己设定或者在爆发,或者使用了狂暴那个掉血技能, 两秒内只能使用一次, 需要增加其他触发条件(例如叠加吸奶时)
                DarkSimulacrum(),
                DarkSimulacrumUse(),//需要改进
                DeathsAdvance(),//敌人离我5码以上,我被减速
                StrangulateLow(),//当某人血少时,对他使用沉默(需要改进,应该是当前目标血少且治疗没有免疫沉默时,对治疗使用沉默.如果没有治疗,则对当前血少目标沉默
                DeathGrip(),
                DeathGripAsphyxiateHelpFriend(),//同伴血少,自己血比敌人高出10%时,用拉或者窒息在打同伴的近战职业
                DeathGripRemorselessWinter(),//开冰时,拉人
                //Asphyxiate(),
                UnholyPresenceSwap(),//血高于门限,或者在"burst"期间,转成绿脸
                BloodPresenceSwap(),//血少与门限,且没有"burst",转红脸,最小转换间隔可设置
                HornofWinterBuff(),
                RaiseAlly(),
                RaiseDeadUnholy(),
                new Decorator(
                    ret => !_aoEModeOn,
                    new PrioritySelector(
                        AttackASAP(),//宝宝跳打,或者ice touch,或者是死缠打
                        DarkSuccor(),//免费死打回血
                        SoulReaper(),//血少于门限,上收割,可以优化配合吸奶
                        DarkTransformation(),//宝宝能变身就变身
                        GargoyleFrenzy(),//招天鬼+自身爆发
                        GorefiendsGraspAoE(),//群拉AOE
                        GorefiendsGraspKiter(),
                        GorefiendsGraspMelee(),
                        IcyTouchDispel(),//驱散
                        RemorselessWinter(),
                        RemorselessWinterEnemyLowHP(),
                        RemorselessWinterEnemyNumber(),
                        RemorselessWinterBurst(),
                        DeathCoilHeal(),//变身时,用缠绕给自己加血
                        ChainsofIce(),//5码外，没有被减速，上次拉人或者减速2秒以上，可以用死亡(修改：取消了不能使用死文的限制）
                        ChainsofIceMelee(),
                        DeathandDecaySnare(),
                        DeathPact(),//吃宝宝回血
                        DeathSiphon(),//死亡回血
                        Conversion(),//转换回血，有个禁止使用能量的判断，不错
                        PlagueLeech(),//只要没有4个死文，就卡CD使用，没有疾病时间的判断，可增加有爆发时或者死文有2个时爆发使用
                        OutbreakPSTrigger(),
                        Outbreak(),//疾病时间小于2秒，使用爆发， 可改成饰品触发时，才用爆发
                        //饰品触发时，如果OutBreak在CD，则优先用
                        UnholyBlight(),
                        //疾病时间小于2秒，近身时使用PlagueStrike上疾病
                        PlagueStrikeDebuff(),//爆发CD3秒以上，疾病时间少于2秒
                        IcyTouchDebuffUnholy(),//爆发CD3秒以上，疾病时间少于2秒，有冰文或可以用死文
                        BloodBoilRoilingBlood(),//传染疾病，如果周围有伤害破控制的敌人，就不用
                        Pestilence(),//传染
                        DeathStrikeUrgent(),//血少且没有治疗在身边时使用
                        DeathCoilShadowInfusion(),//没有变身，且5层前
                        DeathCoilHealPet(),
                        NecroticStrikeStackMax(),//只是在死文超过设定数量时使用一次吸奶，然后启动计时
                        ScourgeStrike90(),//能量90以下，有邪文或者可以用死文(死文大于吸奶设定)时使用天打
                        FesteringStrike90(),//能量90以下,有血+冰文或者可以使用死文，脓包打击
                        DeathCoilProc(),//免费死缠
                        DeathCoilCapRunicPower(),//满能量死缠
                        NecroticStrikeStack(),//如果死文超过设定数量，或者吸奶计时器开启时，能用吸奶就用吸奶，如果从第一次启动计时后10秒且没有死文，就停止计时器
                        ScourgeStrike(),
                        FesteringStrike(),
                        BloodBoilRoilingBloodConversion(),
                        BloodStrikeConversion(),
                        IcyTouchConversion(),
                        IcyTouchDispelLowPriority(),
                        ControlUndead(),
                        ControlUndeadUpdate(),
                        DeathStrike(),
                        BloodStrike(),
                        HornofWinter(),
                        DeathCoilUnholy(),
                        Presence(),
                        PathofFrost()
                        )),
                //new Decorator(
                //    ret => _aoEModeOn && Attackable(Me.CurrentTarget, 10) && Me.CurrentTarget.MaxHealth < Me.MaxHealth,
                //    //Short Duration AoE
                //    new PrioritySelector(
                //        DarkSuccor(),
                //        SoulReaper(),
                //        GargoyleFrenzy(),
                //        PlagueLeech(),
                //        Outbreak(),
                //        UnholyBlight(),
                //        BloodBoilRoilingBlood(),
                //        Pestilence(),
                //        IcyTouchDebuffUnholy(),
                //        PlagueStrikeDebuff(),
                //        DarkTransformation(),
                //        DeathandDecayAoE(),
                //        ScourgeStrike(),
                //        BloodBoilUnholyAoE(),
                //        DeathCoilHealPet(),
                //        DeathCoilProc(),
                //        DeathCoilCapRunicPower(),
                //        DeathCoilShadowInfusion(),
                //        IcyTouchUnholyAoE(),
                //        DeathPact(),
                //        DeathSiphon(),
                //        Conversion(),
                //        HornofWinter(),
                //        Presence(),
                //        PathofFrost()
                //        )),
                new Decorator(
                    ret => _aoEModeOn,
                    //Sustained AoE
                    new PrioritySelector(
                        DarkSuccor(),
                        SoulReaper(),
                        DarkTransformation(),
                        GargoyleFrenzy(),
                        PlagueLeech(),
                        Outbreak(),
                        UnholyBlight(),
                        BloodBoilRoilingBlood(),
                        Pestilence(),
                        IcyTouchDebuffUnholy(),
                        PlagueStrikeDebuff(),
                        //DarkTransformation(),
                        FesteringStrike(),
                        BloodBoilUnholyAoE(),
                        DeathandDecayAoE(),
                        DeathCoilHealPet(),
                        DeathCoilProc(),
                        DeathCoilCapRunicPower(),
                        DeathCoilShadowInfusion(),
                        IcyTouchConversion(),
                        BloodStrikeConversion(),
                        DeathPact(),
                        DeathSiphon(),
                        Conversion(),
                        HornofWinter(),
                        Presence(),
                        PathofFrost()
                        )
                    )
                //RestRotation()
                );
        }

        #endregion
    }
}